<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Object.defineProperty()</title>
  </head>
  <body>
    <script>
      // 三个参数（属性所在的对象，你要操作的属性，被操作的属性的特性）
      //   var geyao = {
      //     sex: "男",
      //     age: 18,
      //   };
      //   console.log(geyao,"geyao1")

      //   Object.defineProperty(geyao, "sex", {

      //     get: function () {
      //       console.log("读取时,get被触发");

      //       return this.sex
      //     },
      //     set: function (value) {
      //       console.log(value,"value");
      //      this.sex=value
      //     },

      //   });
      //   console.log(geyao.sex,"geyao2")
      function getObj() {
        let obj = {
            sex:"男",
            age:18
        };
        let val = ""; //此处val是安全的,外部是无法修改的
        let o = Object.defineProperty(obj, "key", {
          configurable: true,
          enumerable: true,
          get: function () {
            return val || 0;
          },
          set: function (n) {
            val = n;
          },
        });
        return o; //每个对象都是新的
      }
      let aa = getObj();
      console.log(aa.sex); //返回性别
    </script>
  </body>
</html>
